package com.edu.d11_test;

import java.util.List;
import java.util.Random;

/**
 * 使用线程创建的方法一
 */
public class MyThread extends Thread{

    private List<String> gift;

    /**
     * 用于统计每个线程分发礼物的个数
     * 由于每次分发礼物时，礼物都是上了锁的
     * 因此，统计的每次分发次数是属于他们线程自己的。
     */
    private int count;
    //每次拿的都是这个对象里的礼物
    public MyThread(List<String> gift,String name) {
        super(name);
        this.gift = gift;
    }
    /**
     * 小明、小红分发礼物
     * 实现线程安全问题
     * 1、注意：锁必须唯一
     */
    @Override
    public void run() {
        String name = Thread.currentThread().getName();
        Random random = new Random();
        while (true){
            /**
             * 为了保证线程安全，将礼物设为锁的关键
             * 也就是说，每个礼物都是只能发出去一次的。
             */
            synchronized (gift) {
                if(gift.size()<=10){
                    break;
                }
                String remove = gift.remove(random.nextInt(gift.size()));
                System.out.println("线程==》"+name+"分发了礼物"+remove);
            count++;
            }
        }
    }

    public int getCount() {
        return count;
    }

    public void setCount(int count) {
        this.count = count;
    }
}
